When data structures such as containers are intended to be used in a concurrent/multi-threaded environment, a performance/productivity problem arises. More particularly, to achieve thread-safety, many concurrent versions of objects, containers, and other data structures offer a non-restricted interface that has poor performance due to coarse synchronization. The current alternative, the mixed interface, offers a single interface with a mix of fine grain synchronized and unsynchronized methods with slightly better performance, but this corresponds to a productivity problem since the user is required to provide synchronization for many of the unsynchronized (unsafe) methods. Moreover, although this alternative has slightly better performance, it still provides reduced performance relative to the serial and read-only equivalents. The alternative also results in reduced developer productivity due to the difficulty of the user having to ensure and provide synchronization of the unsynchronized (unsafe) methods.
As a result, developers are forced to make a tradeoff between either the mixed interface with reduced productivity (and somewhat reduced performance) alternative, or significantly reduced performance in the exclusive, coarsely-synchronized alternative.